<template class="task-template">
  <section id="crash-hang-section" class="section js-section u-category-windows">
    <header class="section-header">
      <div class="section-wrapper">
        <h1>
          <svg class="section-icon"><use xlink:href="assets/img/icons.svg#icon-windows"></use></svg>
          处理窗体崩溃和挂起
        </h1>
        <h3><code>BrowserWindow</code> 模块将在渲染器进程崩溃或挂起时发出事件. 您可以监听这些事件, 并给用户重新加载, 等待或关闭该窗口的机会.</h3>

        <p>在浏览器中打开 <a href="http://electron.atom.io/docs/api/browser-window">完整的 API 文档<span class="u-visible-to-screen-reader">(在新窗口中打开)</span></a>.</p>
      </div>
    </header>

    <div class="demo">
      <div class="demo-wrapper">
        <button id="new-window-crashes-demo-toggle" class="js-container-target demo-toggle-button">进程崩溃后重载窗体
          <div class="demo-meta u-avoid-clicks">支持: Win, macOS, Linux <span class="demo-meta-divider">|</span> 进程: Main</div>
        </button>
        <div class="demo-box">
          <div class="demo-controls">
            <button class="demo-button" id="process-crash">查看示例</button>
          </div>
          <p>在这个示例中我们创建一个新窗口 (通过 <code>remote</code> 模块) 并提供了一个使用 <code>process.crash()</code> 方法强制崩溃的链接.</p>
          <p>当前窗体正在监听崩溃事件, 当此事件发生时, 它提供用户两个选项: 重新加载或关闭.</p>

          <h5>渲染器进程</h5>
          <pre><code data-path="renderer-process/windows/process-crash.js"></code></pre>
        </div>
      </div>
    </div>

    <div class="demo">
      <div class="demo-wrapper">
        <button id="new-window-hangs-demo-toggle" class="js-container-target demo-toggle-button">进程挂起后重载窗体
          <div class="demo-meta u-avoid-clicks">支持: Win, macOS, Linux <span class="demo-meta-divider">|</span> 进程: Main</div>
        </button>
        <div class="demo-box">
          <div class="demo-controls">
            <button class="demo-button" id="process-hang">查看示例</button>
          </div>
          <p>在这个示例中我们创建一个新窗口 (通过 <code>remote</code> 模块) 并提供了一个使用 <code>process.hang()</code> 方法强制挂起进程的链接.</p>
          <p>当前窗体正在监听进程是否真正无响应 (这可能需要长达30秒). 当此事件发生时, 它提供用户两个选项: 重新加载或关闭.</p>

          <h5>渲染器进程</h5>
          <pre><code data-path="renderer-process/windows/process-hang.js"></code></pre>

          <div class="demo-protip">
            <h2>高级技巧</h2>
            <strong>等待进程再次响应.</strong>
            <p>在进程挂起的的情况下, 第三个选择是等待并查看问题是否解决, 允许进程再次响应. 为此, 请使用 <code>BrowserWindow</code> 的 "responsive" 事件, 如下所示:</p>
            <pre><code class="language-js">win.on('responsive', function () {
  // 当窗口再次响应时做些什么
})</code></pre>
          </div>
        </div>
      </div>
    </div>



    <script type="text/javascript">
      require('./renderer-process/windows/process-crash')
      require('./renderer-process/windows/process-hang')
    </script>

  </section>
</template>
